package com.yyq.gxdc.controller;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yyq.gxdc.bean.Result;
import com.yyq.gxdc.entity.User;
import com.yyq.gxdc.service.IUserService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @since 2023-12-04
 */
@Api(tags = "用户模块接口")
@CrossOrigin
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private IUserService userService;

    /**
     * 分页查找
     * @param user
     * @param pageNo
     * @param pageSize
     * @param model
     * @return
     */
    @GetMapping("/mgr/userList")
    public Result<IPage<User>> userList(
            User user,
            @RequestParam(defaultValue = "1") Integer pageNo,
            @RequestParam(defaultValue = "10000") Integer pageSize,
            Model model) {

        Result<IPage<User>> result = new Result<IPage<User>>();
        Page<User> page = new Page<User>(pageNo, pageSize);

        IPage<User> allUser = userService.getAllUser(page, user);
        result.setSuccess(true);
        result.setResult(allUser);
        return result;
    }


    /**
     * 添加用户
     * @param user
     * @param req
     * @return
     */
    @PostMapping(value = "/addUser")
    public Result<Object> addUser(User user, HttpServletRequest req) {
        // 先查询 这个 登录名 是否已存在
        User checkUserName = userService.findUserByUserName(user.getUsername());
        if(checkUserName != null){
            return Result.error(user.getUsername()+":登录账户名已被注册！");
        }
        // 检查手机号  登录
        User checkPhone = userService.findUserByUserName(user.getPhone());
        if(checkPhone != null){
            return Result.error("手机号已被绑定！");
        }
        // 然后开始注册 保存该用户信息到数据库
        user.setUsetype("0");
        userService.save(user);
        return Result.ok();
    }

    /**
     * 修改用户
     * @param user
     * @param req
     * @return
     */
    @PostMapping(value = "/updateUser")
    public Result<Object> updateUser(User user, HttpServletRequest req) {
        User byId = userService.getById(user.getId());
        if(!byId.getUsername().equals(user.getUsername())){
            // 说明 改 登录名
            User checkUserName = userService.findUserByUserName(user.getUsername());
            // 检查这个 登录名 有没有被占用
            if(checkUserName != null){
                return Result.error(user.getUsername()+":登录账户名已被注册！");
            }
        }

        if(!byId.getPhone().equals(user.getPhone())){
            // 说明 改 登录名
            User checkUserName = userService.findUserByUserName(user.getUsername());
            // 检查手机号  是否被占用
            User checkPhone = userService.findUserByUserName(user.getPhone());
            if(checkPhone != null){
                return Result.error("手机号已被绑定！");
            }
        }
        // 然后开始注册 保存该用户信息到数据库
        user.setUsetype("0");
        userService.updateById(user);
        return Result.ok();
    }

    /**
     * 删除用户
     * @param user
     * @param req
     * @return
     */
    @PostMapping(value = "/deleteUser")
    public Result<Object> deleteUser(User user, HttpServletRequest req) {
        // 先查询 这个 登录名 是否已存在
        User byId = userService.getById(user.getId());
        if(byId == null ){
            return Result.error("该用户不存在！");
        }else{
            userService.removeById(user.getId());
            return Result.ok();
        }
    }
}

